# 创建字典
"""
person = {"姓名":"王俊博","年龄":98}
"""
# 字典里面的key不可以重复，否则后面的key会覆盖到前面
"""
a = {"name":"龙仔","age":18,"name":"候雯中"}
print(a) # 后面的key会覆盖前面的
"""
# 字典里的值可以是任意数据类型
"""
a1 = {"name":"张三","age":18,"source":[10,20,30],"ss":(1,2,3)}
print(a1)
"""
#key只能使用不可变数据类型
"""
a2 = {"年龄":19,(1,):"test",1:"test2"}
print(a2)
"""
"""
a3 = {[1,2]:"test1"}
print(a3) # TypeError: unhashable type: 'list' ，字典里的key不能是可变的数据结构
"""
# 通过dict创建字典对象
"""
b = dict(name="张三",age='18',job='计算机')
print(b) # {'name': '张三', 'age': '18', 'job': '计算机'}
"""
# 创建一个空的字典
"""
c = {}
print(c) #{}
"""
# 通过zip()创建字典对象
"""
k = ['name','age','job']
v = ['longzai',18,'teacher']
d = dict(zip(k,v))
d1 = dict(zip(v,k))
print(d) # {'name': 'longzai', 'age': 18, 'job': 'teacher'}
print(d1)
"""
# 通过formkeys创建值为空的字典
"""
a = dict.fromkeys(['name','age','job'])
print(a) # {'name': None, 'age': None, 'job': None}
"""
# 增删改查
# 字典是可变的数据结构
student_info = {"姓名":"张三","年龄":18}
# 根据student_info 增加一组key、value
# 增
"""
student_info.update({"性别":"男"})
print(student_info)

student_info['地址'] = "辽宁省沈阳市" # 这种方式，如果之前的key不存在，则是新增，存在，则是修改
print(student_info)

student_info['姓名'] = "王俊博" # 存在，则是修改
print(student_info)
"""
# 删
"""
student_info.pop("姓名") # 通过pop内置方法删除
print(student_info) # {'年龄': 18}

del student_info['年龄'] # 通过python提供的方法删除
print(student_info)

student_info1 = {"姓名":"张三","年龄":18}
student_info1.popitem() # 删除最后一组key、value，
print(student_info1)

student_info1.clear() # 清空
print(student_info1)
"""
# 改
"""
student_info2 = {"姓名":"张三","年龄":18}
student_info2['姓名'] = '王俊博' # key存在则是修改，不存在则是新增
print(student_info2)
"""
# 查
student_info3 = {"姓名":"张三","年龄":18}
"""
print(student_info3['姓名']) # 单独查这个key下的value
print(student_info3['年龄']) # 单独查这个key下的value
# print(student_info3['年龄1']) # 查询不存在的key，KeyError: '年龄1'

print(student_info3.values()) # 获取这个字典下的全部value，返回格式是列表
print(student_info3.keys()) # 获取这个字典下的全部key，返回格式是列表
print(student_info3.items())# 获取这个字典下的全部key、value，返回格式是列表
"""
# 遍历访问字典
"""
for i in student_info3: # 如此遍历，拿到的是字典里面的key
    print(i)
"""
# 遍历访问字典里面的value
"""
for i in student_info3.values():
    print(i)
"""
# 遍历访问字典里面的key
"""
for i in student_info3.keys():
    print(i)
"""
# 遍历访问字典里面的key、value
"""
for key,value in student_info3.items():
    print(key,value)
"""
# 通过内置方法来获取这个key下的值
"""
print(student_info3.get("姓名"))
"""
# 字典推导式
dict1 = {"a":100,"b":200,"c":300}
dict2 = {v:k for k,v in dict1.items()}
"""
v:k 最终返回的内容
for k,v in dict1.items()：遍历访问dict1里面的key和value
{}： 返回字典形式
"""
# print(dict2) # {100: 'a', 200: 'b', 300: 'c'}
# print(len(dict2)) # 3

# 字典解包（打包和解包并不能脱离函数而存在）
"""
c = {"name":"zhang","age":22}
# print(**c) # TypeError: 'name' is an invalid keyword argument for print()

print("Name:{name},Age:{age}".format(**c))
"""
# 让用户输入姓名,如果姓名已经存在,提示用户,如果姓名不存在,继续输入年龄,并存入列表里
persons =[
    {'name':'龙仔','age':18},
    {'name':'周周','age':18},
    {'name':'奎奎','age':18},
    {'name':'灿灿','age':18}
]
name = input("请输入姓名")
import random
age = random.randint(18,24) # 从18~24随机返回一位

# 错误的方法
"""
for i in persons:
    # 第一次循环的时候，i的值：{'name': '龙仔', 'age': 18}
    # 第二次循环，i的值：{'name': '周周', 'age': 18}
    # 第三次循环，i的值：{'name': '奎奎', 'age': 18}
    # 第四次循环，i的值：'name': '灿灿', 'age': 18}
    # print(i['name'])
    if name == i['name']:
        print("姓名存在于列表")
    else:
        i['name'] = name # 不在里面，则新增他的姓名
        i['age'] = age # 把年龄也给他加上去
print(persons)
"""
# 正确的方法
"""
result = "假的" # 判断是否存在
for i in range(len(persons)): # 根据索引遍历
    if name in persons[i]['name']:
        print("您添加的姓名存在于字典中")
        result = "真的" # 只有要添加的姓名存在了字典里面，所以才会变成真的
        break
if result=="假的": #否则 他依然是假的
    persons.append({"name":name,"age":age})
print(persons)
"""
# 方法二：
"""
value_list = [] # 先收集下所有的值
for i in range(len(persons)):
    value_list.append(persons[i]['name']) # 收集全部的value值
print(value_list)
if name in value_list: # 判断 你要输入的是否在值列表里
    print("在里")
else:
    persons.append({"name":name,"age":age})
print(persons)
"""
value_list2 = []
for i in persons:
    """
    第一次循环，i的值：{'name':'龙仔','age':18}
    第二次循环，i的值：{'name':'周周','age':18}
    第三次循环，i的值：{'name':'奎奎','age':18}
    第四次循环，i的值：{'name':'灿灿','age':18}
    """
    # i = {'name':'龙仔','age':18}
    # i['name']
    value_list2.append(i['name']) # 龙仔  周周 奎奎  灿灿
# print(value_list2)

for i in range(len(persons)): # 4
    print(i) # 0 1 2 3
    print(persons[i]) # persons[0]  persons[1]  persons[2]  persons[3]





